package pe.gob.onpe.ejb;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import pe.gob.onpe.ejb.id.CandidatoId;


/**
 * Candidato entity.
 * 
 * @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "CANDIDATO", schema = "SVENP", uniqueConstraints = { @UniqueConstraint(columnNames = { "NUMERODOCUMENTO" }) })
public class Candidato implements java.io.Serializable {

	// Fields

	private static final long serialVersionUID = -6135772223233128422L;
	private CandidatoId id;
	private ListaCandidatosPostulante listaCandidatosPostulante;
	private PadronElectoralOnpe padronElectoralOnpe;
	private String rutafotocandidato;
	private Long candidatoprincipal;

	// Constructors

	/** default constructor */
	public Candidato() {
	}

	/** minimal constructor */
	public Candidato(CandidatoId id,
			ListaCandidatosPostulante listaCandidatosPostulante,
			PadronElectoralOnpe padronElectoralOnpe, Long candidatoprincipal) {
		this.id = id;
		this.listaCandidatosPostulante = listaCandidatosPostulante;
		this.padronElectoralOnpe = padronElectoralOnpe;
		this.candidatoprincipal = candidatoprincipal;
	}

	/** full constructor */
	public Candidato(CandidatoId id,
			ListaCandidatosPostulante listaCandidatosPostulante,
			PadronElectoralOnpe padronElectoralOnpe, String rutafotocandidato,
			Long candidatoprincipal) {
		this.id = id;
		this.listaCandidatosPostulante = listaCandidatosPostulante;
		this.padronElectoralOnpe = padronElectoralOnpe;
		this.rutafotocandidato = rutafotocandidato;
		this.candidatoprincipal = candidatoprincipal;
	}

	// Property accessors
	@EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "numerodocumento", column = @Column(name = "NUMERODOCUMENTO", unique = true, nullable = false, insertable = true, updatable = true)),
			@AttributeOverride(name = "procesoElectoralId", column = @Column(name = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)),
			@AttributeOverride(name = "listacandidatospostulanteId", column = @Column(name = "LISTACANDIDATOSPOSTULANTE_ID", unique = false, nullable = false, insertable = true, updatable = true, precision = 10, scale = 0)) })
	public CandidatoId getId() {
		return this.id;
	}

	public void setId(CandidatoId id) {
		this.id = id;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumns( {
			@JoinColumn(name = "PROCESO_ELECTORAL_ID", referencedColumnName = "PROCESO_ELECTORAL_ID", unique = false, nullable = false, insertable = false, updatable = false),
			@JoinColumn(name = "LISTACANDIDATOSPOSTULANTE_ID", referencedColumnName = "LISTACANDIDATOSPOSTULANTE_ID", unique = false, nullable = false, insertable = false, updatable = false) })
	public ListaCandidatosPostulante getListaCandidatosPostulante() {
		return this.listaCandidatosPostulante;
	}

	public void setListaCandidatosPostulante(
			ListaCandidatosPostulante listaCandidatosPostulante) {
		this.listaCandidatosPostulante = listaCandidatosPostulante;
	}

	@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
	@JoinColumn(name = "NUMERODOCUMENTO", unique = true, nullable = false, insertable = false, updatable = false)
	public PadronElectoralOnpe getPadronElectoralOnpe() {
		return this.padronElectoralOnpe;
	}

	public void setPadronElectoralOnpe(PadronElectoralOnpe padronElectoralOnpe) {
		this.padronElectoralOnpe = padronElectoralOnpe;
	}

	@Column(name = "RUTAFOTOCANDIDATO", unique = false, nullable = true, insertable = true, updatable = true)
	public String getRutafotocandidato() {
		return this.rutafotocandidato;
	}

	public void setRutafotocandidato(String rutafotocandidato) {
		this.rutafotocandidato = rutafotocandidato;
	}

	@Column(name = "CANDIDATOPRINCIPAL", unique = false, nullable = false, insertable = true, updatable = true, precision = 1, scale = 0)
	public Long getCandidatoprincipal() {
		return this.candidatoprincipal;
	}

	public void setCandidatoprincipal(Long candidatoprincipal) {
		this.candidatoprincipal = candidatoprincipal;
	}

}